文本(Text)
使用运行时的整形器(shaper)对带样式的文本 run 进行整形与排版,因此脚本可以获得真实的换行和双向排序。追加 run、设置文本框,然后一次调用绘制全部内容,或遍历其行与字形自行绘制。码点索引从 1 开始,与 utf8.offset 一致。
type Label = {
text: Text,
paint: Paint,
}
function init(self: Label, context: Context): boolean
local font = context:font('IBM Plex Sans Arabic')
self.text:append('مرحبا بالعالم', { font = font, size = 32, paint = self.paint })
self.text.sizing = 'fixed'
self.text.maxWidth = 240
self.text.align = 'start'
return true
end
function draw(self: Label, renderer: Renderer)
self.text:draw(renderer)
end
字段(Fields)
sizing
尺寸模式,见 文本尺寸(TextSizing)。
overflow
溢出处理,见 文本溢出(TextOverflow)。
align
对齐方式,见 文本对齐(TextAlign)。
wrap
换行方式,见 文本换行(TextWrap)。
wordBreak
断词方式,见 文本断词(TextWordBreak)。
origin
原点,见 文本原点(TextOrigin)。
direction
书写方向,见 文本方向(TextDirection)。
maxWidth
当尺寸模式不是 'autoWidth' 时的换行宽度。
maxHeight
当尺寸模式为 'fixed' 时,文本发生溢出的高度。
paragraphSpacing
由换行分隔的段落之间的间距。
length
已追加的码点数量。
isEmpty
文本是否为空。
lineCount
行数。
构造器(Constructors)
new
new() -> Text
创建空文本。
方法(Methods)
append
append(text: string, style: TextRunStyle) -> ()
追加一段带样式的 run。各 run 会拼成同一字符串;换行会开始新段落。
clear
clear() -> ()
移除全部 run。
draw
draw(renderer: Renderer, paint: Paint?) -> ()
用各自的画笔绘制每一段 run;若传入画笔,则全部使用该画笔绘制。
bounds
bounds() -> (Vector, Vector)
已排版文本的最小角与最大角。
line
line(index: number) -> TextLine
按从上到下、从 1 开始的索引返回该行。
lines
lines() -> {TextLine}
全部行,从上到下。
hitTest
hitTest(position: Vector) -> number
文本局部坐标系中最接近给定点的码点索引。